import os
import pymupdf

"""
    
doc = pymupdf.open("pyqtgraphdoc-readthedocs-io-en-latest.pdf")

# # 1、获取pdf 页数
# pageCount = doc.page_count
# print("pdf 页数: ", pageCount)
 
# # 2、获取pdf 元数据
# metaData = doc.metadata
# print("pdf 元数据: ", metaData)
 
# # 3、获取pdf 目录信息
# toc = doc.get_toc()
# print("pdf 目录：", toc)


page = doc.load_page(0) # 加载每页数据
page = doc[0] # 加载每页数据

# Page 页面-光栅图像
pix = page.get_pixmap()
print("打印页面图像对象:", pix)
# 保存光栅图像图像,需要依赖第三方框架:Pillow
pix.pil_save("page-%i.png" % page.number)


"""

def open_pdf(filename):
    """
    打开PDF文件并返回PdfDocument对象。
    
    Args:
        filename (str): PDF文件的路径。
    
    Returns:
        pymupdf.PdfDocument: PdfDocument对象，代表打开的PDF文件。
    
    Raises:
        FileNotFoundError: 如果指定的文件不存在，则抛出此异常。
        ValueError: 如果在打开PDF文件时发生错误，则抛出此异常，并附带错误信息。
    
    """
    if not os.path.isfile(filename):
        raise FileNotFoundError(f"File {filename} not found.")
    
    try:
        pdf = pymupdf.open(filename)
        return pdf
    except Exception as e:
        raise ValueError(f"Error opening PDF file {filename}: {e}")

    return None


def get_page(pdf, page_num=0):
    page = pdf.load_page(page_num) # 加载每页数据
    page = pdf[page_num] # 加载每页数据
    return page


def save_pixmap(pdf_page, page_num = 0, path="./images/"):
    pix = pdf_page.get_pixmap()
    pix.pil_save(os.path.join(path, "page-%i.png" % page_num))
    return os.path.join(path, "page-%i.png" % page_num)


if __name__ == "__main__":
    pdf = open_pdf(r"pyqtgraphdoc-readthedocs-io-en-latest.pdf")
    page = get_page(pdf, 0)
    save_pixmap(page, path='')
